﻿#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>

//int* getConcatenation(int* nums, int numsSize, int* returnSize)
//{
//	*returnSize = numsSize * 2;
//	int* ans = malloc(sizeof(int) * numsSize * 2);
//	assert(ans);
//	for (int i = 0; i < numsSize; i++)
//	{
//		ans[i] = nums[i];
//		ans[i + numsSize] = nums[i];
//	}
//	return ans;
//
//}
//
//int main()
//{
//	int nums[] = { 1,2,1 };
//	int sz1 = sizeof(nums) / sizeof(nums[0]);
//	int sz2 = 0;
//	int* ans = getConcatenation(nums, sz1, &sz2);
//	for (int i = 0; i < sz2; i++)
//	{
//		printf("%d ", ans[i]);
//	}
//	return 0;
//}

//练习使用动态内存相关的4个函数，并调试观察。
//malloc、calloc、realloc、free

//int main()
//{
//	char* arr1 = (char*)malloc(sizeof(char) * 10);
//	if (arr1 == NULL)
//	{
//		perror("arr1:");
//		return 1;
//	}
//	strcpy(arr1, "abcdef");
//	printf("%s\n", arr1);
//
//	char* arr2 = (char*)calloc(20, sizeof(char));
//	if (arr2 == NULL)
//	{
//		perror("arr2:");
//		return 1;
//	}
//	strcpy(arr2, "aabbccddeeffgg");
//	printf("%s\n", arr2);
//
//	char* arr3 = realloc(arr1, sizeof(char) * 20);
//	if (arr3 != NULL)
//	{
//		arr1 = arr3;
//		strcpy(arr1, "ggffeeddccbbaa");
//		printf("%s\n", arr1);
//	}
//
//	free(arr1);
//	arr1 = NULL;
//	free(arr2);
//	arr2 = NULL;
//
//
//
//	return 0;
//}

// 使用malloc函数模拟开辟一个3*5的整型二维数组，开辟好后，使用二维数组的下标访问形式，访问空间。

int main()
{
	int(*arr)[5] = (int(*)[5])malloc(sizeof(int) * 3 * 5);
	if (arr == NULL)
	{
		perror("arr1:");
		return 1;
	}
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 5; j++)
		{
			arr[i][j] = i + j;
		}
	}
	for (int i = 0; i < 3; i++)
	{
		for (int j = 0; j < 5; j++)
		{
			printf("%d ", arr[i][j]);
		}
		printf("\n");
	}

	free(arr);
	arr = NULL;
	return 0;
}